// 语言第四章 函数
// 当函数名大写，构造函数
// JS 函数可以构造一个类
// JS 早期没有class关键字，并不影响它做Java类的传统面向对象编程
// JS 函数是一等对象，可以用来构造对象
// JS 其实没有类
function Cat(name){
    // 给一组对象添加属性
    this.name = name;
    // 内存开销 复杂的多 入栈 分配堆内存
    // this.makeSound=function(){
    // console.log('喵喵喵');
    // }
}
// 是一个构造对象的函数
// 函数也是对象
// JS 函数对象有 prototype属性
// 公有的方法放到prototype 对象中
Cat.prototype.makeSound=function(){
    console.log('喵喵喵');
    }
Cat.prototype.eat=function(){
    console.log('吃鱼');
    }
Cat.sayHi =function(){
    console.log('hello');
}
// 同一组对象 共同的类方法， 属性模板
 var xm = new Cat('小黑');
 xm.makeSound();
 console.log(xm.name);
 //xm.sayHi(); // 不能调用
// var xh = new Cat('小花');
// console.log(xm == xh);
// console.log(xm.constructor == xh.constructor)
// // 判断对象是某类的实例
// // typeof  判断类型 [] object
// // instanceof是Java的一个保留关键字，左边是对象，右边是类，
// // 返回类型是Boolean类型
// console.log(xm instanceof Cat);

// // Object 既是对象又是函数
// // 函数是一等对象 
// let a={}; //对象字面量的构造函数就是 Object()
// let obj = new Object();  //对象字面量
// console.log(obj);
// console.log(obj instanceof Object)
console.log(Cat.prototype);

